/* Пример программы для доступа к DS1820/DS18S20 */

/* Микроконтроллер  AT90S2313, шина 1-Wire  DS1820/DS18S20 
   подключена к 0 биту PORTB (рис. 342) */

#include <90s2313.h> 	// подключftм заголовочный файл используемого 
					// микроконтроллера AVR

/* Перед подключением файла ds1820.h, объявим порт и бит порта, 
   используемые для подключения шины 1-Wire  */

/* Шина 1-Wire  подключена к 0 биту PORTB микроконтроллера AT90S2313 
   Адрес порта находим в файле 90s2313.h в строке: sfrb PORTB=0x18; */
#asm
.equ __w1_port=0x18
.equ __w1_bit=0
#endasm

/* Теперь можно подключать Функции Температурного Датчика DS1820/DS18S20 */ 
#include <ds1820.h>

/* определим максимальное количество устройств DS1820/DS18S20, 
   которое может присутствовать на шине 1-Wire  */ 
#define max_number 8

/* распределим пространство SRAM для ROM кода устройств 
   DS1820/DS18S20 и бита статуса
   Для каждого устройства используется 9 байтов (смотри описание функции
   w1_search в главе "Функции Протокола 1-Wire", стр. 414), но только первые
   8 байтов содержат ROM код и CRC (контрольную сумму) */
   
unsigned char cod_rom[max_number,9];

/* Основная функция программы */ 

void main(void) 
{ 
unsigned char i; 			// Объявляем индексную переменную i
		unsigned char number_DS1820; 	// Объявляем переменную number_DS1820,
							// где будет храниться количество
							// устройств DS1820/DS18S20,
							// присутствующих на шине 1-Wire 

		int temper[max_number]; 	//Объявляем целочисленный массив temper,
							// где будут храниться значения 
							// температур в  °C x 10, измеренных
							// устройствами DS1820/DS18S20

		/* инициализируем DS1820/DS18S20 устройства на шине 1-Wire  
	   	   функцией w1_init */
 
		if(w1_init())
		/* Следующие операторы в фигурных скобках будут выполняться, если
	   	   функция w1_init вернет значение, не равное 0, т.е., если на шине
	   	   1-Wire  присутствует ходя бы одно устройство DS1820/DS18S20 
	   	   (см. "Функции Протокола 1-Wire", стр. 414) */
		{
			/* определим, сколько устройств DS1820/DS18S20 подключено к шине 
   	   	   1-Wire ,и сохраним их ROM коды в массиве cod_rom 
		   	   Для этого вызываем функцию w1_search с командой Search ROM 
		   	   (Поиск ROM кодов) (код - F0h) 
		   	   (см. "Функции Протокола 1-Wire", стр. 414) */
 
			number_DS1820=w1_search(0xf0,&cod_rom[0][0]); 	 
			
			/* теперь в переменной number_DS1820 хранится количество
		   	   устройств DS1820/DS18S20, присутствующих на шине 1-Wire , а 
		   	   в массиве cod_rom их ROM коды */
	
				/* измерим температуру и результаты занесем 
		  	 	   в массив  temper */ 
				while (1) 
      		{
      			for (i=0;i<number_DS1820;) 
          			{
          			    temper[i]=ds1820_temperature_10(&cod_rom[i][0]); 
          			}; 
      		}; 
			/* теперь в массиве temper хранятся значения температур 
		   	   в °C x 10, измеренные всеми устройствами DS1820/DS18S20, 
 		   присутствующими на шине 1-Wire  */
				...
			}
		...

		while (1); 			// заканчиваем программу бесконечным циклом 
}
